import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';


///
///  状态管理库  Provider 基本使用
///  https://github.com/rrousselGit/provider/blob/master/resources/translations/zh-CN/README.md
///
///
///  MultiProvider
///  ChangeNotifierProvider
///  ChangeNotifier
///  context.watch<T>()，widget 能够监听到T类型的提供者发生的改变。
///  context.read<T>()，直接返回T，不会监听改变。
///  context.select<T，R>(R cb(T value))，允许小部件只监听T上的一部分内容的修改
///  使用Provider.of<T>(context)这种静态方法，它的表现类似watch，而在你为传入listen: false参数时（例如Provider.of<T>(context，listen: false)），它的表现与read类似
///
class LearnApp04 extends StatelessWidget{
  const LearnApp04({super.key});

  @override
  Widget build(BuildContext context) {

    ///多状态
    return MultiProvider(
        providers:[
          ChangeNotifierProvider(create: (_) => Counter())
        ]
    ,child:MaterialApp(
          title: "provider状态管理",
          theme: ThemeData.light(
          ),
          home: FirstPage(),
        ));

  }


}


/// ChangeNotifier是 Flutter SDK 中包含的一个简单类，它向其侦听器提供更改通知
class Counter  with ChangeNotifier,DiagnosticableTreeMixin {

  /// 存储数据
  int _count =0;

  /// 外部能够访问的数据
  int get count => _count;

  /// 提供更改数据
  void increment(){
    _count++;
    notifyListeners();
  }

  ///添加扩展属性，devtools 工具可以查看
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(IntProperty("count", count));
  }
}

class FirstPage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
      return Scaffold(
        appBar:  AppBar(
          title: Text("第一个页面"),
          actions: [
            IconButton(onPressed: (){
                Navigator.push(context,MaterialPageRoute(builder: (context){
                  return SecondPage();
                }));
            },icon: Icon(Icons.next_plan),)
          ],
        ),
        body: Center(
            child: Text("点击数：${context.watch<Counter>().count}"),

        ),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: (){
              context.read<Counter>().increment();
            },
        ),
      );

  }


}


class SecondPage extends StatelessWidget {
  const SecondPage({super.key});

  @override
  Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text("第二个页面"),
        ),
        body: Center(
          child: Text("点击值：${Provider.of<Counter>(context).count}"),
        ),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: (){
           Provider.of<Counter>(context,listen: false).increment();
          },
        ),
      );
  }


}